﻿using System;
using System.Collections.Generic;
using Loki.Engine.Data;

namespace Luna.Data.Accounting
{
    public interface IAccountingDataProvider : IDataProvider
    {
        #region Catetories
        IEnumerable<INamedEntityData> GetAllCategories();

        INamedEntityData GetCategory(Guid P_CategoryID);

        void SaveCategory(INamedEntityData P_Category);

        void DeleteCategory(Guid P_Category);
        #endregion

        #region Account
        IEnumerable<IAccountData> GetAllAccounts();

        IAccountData GetAccount(Guid P_AccountID);

        void SaveAccount(IAccountData P_Account, IEnumerable<IOtherOperationData> P_Operations);

        void SaveAccount(IAccountData P_Account);

        void DeleteAccount(Guid P_AccountID);
        #endregion

        #region Credit Card
        IEnumerable<IAccountCreditCardData> GetAllCreditCards();

        IEnumerable<IAccountCreditCardData> GetAllCreditCardsByAccount(Guid P_AccountID);

        IAccountCreditCardData GetCreditCard(Guid P_CreditCardID);

        void SaveCreditCard(IAccountCreditCardData P_Card);

        void DeleteCreditCard(Guid P_CardID);
        #endregion

        IEnumerable<IOtherOperationData> GetAllOtherOperations();

        IEnumerable<IOtherOperationData> GetAllOtherOperationsByAccount(Guid P_AccountID);

        IOtherOperationData GetOtherOperation(Guid P_OperationID);

        void SaveOtherOperation(IOtherOperationData P_OtherOperation);

        void DeleteOtherOperation(Guid P_OperationID);
    }
}
